﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Biciq.Web.UI.Base;
using System.Globalization;
using Biciq.Logica;
using DevExpress.Web.ASPxTreeView;
using Biciq.Datos;


namespace Biciq.Web.UI.Seguridades
{
    public partial class AccesosSistema : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.cargarRoles();
                this.cargarMenu();
                this.Seleccionar(Guid.Parse(cmbRol.SelectedValue));
            }
        }
        private void Seleccionar(Guid idRol)
        {
         
            SeguridadServicio servicio = new SeguridadServicio();
            List<Recurso> recursosRol = servicio.consultarRecursos(idRol);

            foreach (TreeViewNode n in ASPxTreeView1.Nodes)
            {
                
                foreach (Recurso r in recursosRol)
                {
                    if (n.Name == r.id.ToString())
                    {
                        n.Checked = true;
                    }
                    seleccionar(n, recursosRol);
                }
            }
        }
        private void seleccionar(TreeViewNode node, List<Recurso> recursos)
        {
            
            foreach (TreeViewNode nodes in node.Nodes)
            {
                
                foreach (Recurso recurso in recursos)
                {
                    if (nodes.Name == recurso.id.ToString())
                    {
                        nodes.Checked = true;
                    }
                        
                }

            }

        }
        private void cargarMenu()
        {
            CultureInfo cultura = (CultureInfo)Session["MyUICulture"];
            SeguridadServicio servicio = new SeguridadServicio();

            List<Recurso> recursos = servicio.consultarRecursos();

            List<Recurso> recursosPadre = recursos.Where(r => r.tipo == "P").ToList();

            foreach (Recurso padre in recursosPadre)
            {
                TreeViewNode nodePadre = new TreeViewNode();
                nodePadre.Name=padre.id;
                nodePadre.Expanded = true;
                        nodePadre.Text = padre.descripcion;
                   
                  ASPxTreeView1.Nodes.Add(nodePadre);
                foreach (Recurso hijo in recursos.Where(r => r.idPadre == padre.id))
                {
                    TreeViewNode nodeHijo = new TreeViewNode();
                    nodeHijo.Name = hijo.id;
                    
                        nodeHijo.Text = hijo.descripcion;
                        nodeHijo.Expanded = true;
                   
                    nodePadre.Nodes.Add(nodeHijo);
                }
            }
                
        }
        private void cargarRoles()
        {
            CultureInfo cultura = (CultureInfo)Session["MyUICulture"];
            SeguridadServicio servicio = new SeguridadServicio();
            cmbRol.DataValueField = "id";
           
                cmbRol.DataTextField = "nombre";
               
           
            
            cmbRol.DataSource = servicio.consultarRol("", cultura.Name);
            cmbRol.DataBind();

            

        }

        protected void cmbRol_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.ASPxTreeView1.Nodes.Clear();
            this.cargarMenu();
            this.Seleccionar(Guid.Parse(cmbRol.SelectedValue));
        }

        protected void btnCancelar_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("../Principal/Inicial.aspx");
        }

        protected void btnGuardar_Click(object sender, ImageClickEventArgs e)
        {
            Guid idRol = Guid.Parse(cmbRol.SelectedValue);
            List<string> listaSeleccionados = new List<string>();
            foreach (TreeViewNode n in ASPxTreeView1.Nodes)
            {
                if (n.Checked)
                {
                    listaSeleccionados.Add(n.Name);
                }
                listaSeleccionados.AddRange(getSeleccionados(n));
            }
            Result result = new Result();

            SeguridadServicio servicio = new SeguridadServicio();
            Comun comun = new Comun();
            foreach (var acceso in servicio.getAccesos(idRol))
            {
                result = comun.borrarObjeto(acceso, "Accesoes");
                if (!result.estado)
                {
                    WUCMensaje.MensajeError("Error al borrar accesos" + result.mensaje);
                    MessagePopup.Show();
                    return;
                }
            }

            foreach (var item in listaSeleccionados)
            {
                Acceso acceso = new Acceso();
                acceso.estado = "ACT";
                acceso.idRecurso = item;
                acceso.idRol = idRol;

                result = comun.crearObjeto(acceso, "Accesoes");
                if (!result.estado)
                {
                    WUCMensaje.MensajeError("Error al grabar accesos: " + result.mensaje);
                    MessagePopup.Show();
                    return;
                }
            }
           
                        WUCMensaje.MensajeInformacion("Accesos grabados correctamente");
                MessagePopup.Show();
           
            
        }
        private List<string> getSeleccionados(TreeViewNode nodePadre)
        {
            List<string> seleccionados = new List<string>();
            foreach (TreeViewNode nodes in nodePadre.Nodes)
            {
                if (nodes.Checked)
                {
                    seleccionados.Add(nodes.Name);
                }

            }
            return seleccionados;
        }
    }
}